'''
bmr3.0
1.0功能：1.计算bmr
        2.分男女板块
        3.while循环
2.0新增功能 1.加入菜单功能
          2.运用函数封装
          3.引入matplotlib库完成bmr历史曲线
3.0新增功能 1.信息一次性输入
           2.解决直接进入程序二导致的代码崩溃问题
           3.加入异常处理
'''
# （男）BMR（kcal）=66.5+13.8×体重（kg）+5×身高（cm）-6.8×年龄，
# (女)BMR（kcal）=665.1+9.6×体重（kg）+1.8×身高（cm）-4.7×年龄。
import matplotlib.pyplot as plt

a = 0
user_weight = 0
user_height = 0
user_age = 0
user_x = 0
user_BMR = 0
b = 0
b1 = 0
x = []
x1 = []
y = []
y1 = []


def menu():
    while True:
        print('---------------BMR计算器菜单---------------')
        print("1. 计算BMR")
        print("2. 生成BMR历史曲线")
        print("3. 退出程序")
        choice = input("欢迎来到健康测试亲亲，请输入数字(1/2/3)选择要使用的功能：")
        try:
            choice = int(choice)
            if choice == 1:
                math_BMR()
            elif choice == 2:
                BMR_histroy()
            elif choice == 3:
                print('感谢使用BMR计算器，期待下次光临！')
                break
            else:
                print("请输入有效数字(1/2/3)呢，亲亲！")
        # 数值异常
        except ValueError:
            print("请输入有效数字(1/2/3)呢，亲亲！")


def math_BMR():
    global a, user_weight, user_height, user_age, user_x, user_BMR, x, y, b, y1, x1, b1
    user_input = input("准备好开始健康的测试了吗，准备好了请按'1'开始")
    while user_input == "1":
        input_str = input("请输入性别（男/女），体重（kg），身高（m），年龄，用空格隔开：")
        input_str = input_str.replace(',', ' ')
        input_list = input_str.split()
        try:
            user_x = input_list[0]
            user_weight = float(input_list[1])
            if user_weight > 150:
                input_weight = input("这边检测到您的身高异常，是输入成‘斤’了吗，这边帮你自动转化了哦，若不需要请按1")
                if input_weight == "1":
                    user_weight = user_weight
                else:
                    user_weight /= 2
            user_height = float(input_list[2])
            if user_height > 2.5:
                input_height = input("这边检测到您的身高异常，是输入成cm了吗，这边帮你自动转化了哦，若不需要请按1")
                if input_height == "1":
                    user_height = user_height
                else:
                    user_height /= 100
            user_age = float(input_list[3])
        # 超出范围+数值错误
        except (IndexError, ValueError):
            print("请输入正确的信息！")
            return

        if user_x == '男':
            user_BMR = 66.5 + 13.8 * user_weight + 5 * user_height - 6.8 * user_age
            print("经过精密的计算您的BMR是：{:.3f}".format(user_BMR))
            b += 1
            x.append(b)
            y.append(user_BMR)
        elif user_x == '女':
            user_BMR1 = 661 + 9.6 * user_weight + 1.72 * user_height - 4.7 * user_age
            print("经过精密的计算您的BMR是：{:.3f}".format(user_BMR1))
            b1 += 1
            x1.append(b1)
            y1.append(user_BMR1)
        user_input = input("准备好开始健康的测试了吗，准备好了请按'1'开始")

    else:
        print('本次健康测试到此结束喽我们将回到主菜单，期待下次亲亲')


def BMR_histroy():
    if not x and not x1:
        print("无历史数据呢亲亲")
        return
    else:
        # 配置中文字体
        plt.rcParams['font.family'] = 'sans-serif'
        plt.rcParams['font.sans-serif'] = ['SimHei']
        plt.plot(x, y)
        plt.plot(x1, y1)
        # 设置标题和坐标轴标签
        plt.title('历史bmr曲线')
        plt.xlabel('次数')
        plt.ylabel('bmr值')

        # 显示图表
        plt.show()


menu()
